package com.example.base_model.network.error

/**
 * @Author jiangKunKun
 * @CreateDate 2025/7/14
 * @Description 定义了在网络请求过程中可能发生的各种标准化的错误类型。
 * 每个错误都有一个唯一的错误码 [code] 和一个用户友好的描述信息 [msg]。
 * @SpittingGrooves
 */
enum class NetworkRequestError(val code: Int, val msg: String) {

    /**
     * 未知的、未被明确分类的异常。
     */
    UNKNOWN(0, "未知异常"),

    /**
     * 网络连接失败。通常表示设备无网络连接，或无法访问目标主机。
     * 对应 [java.net.UnknownHostException], [java.net.ConnectException] 等。
     */
    NETWORK(-102, "网络连接失败"),

    /**
     * 网络请求超时。表示在指定时间内未能完成连接或数据读取。
     * 对应 [java.net.SocketTimeoutException], [kotlinx.coroutines.TimeoutCancellationException] 等。
     */
    TIMEOUT(-101, "网络请求超时"),

    /**
     * 数据解析失败。通常表示服务器返回的 JSON 格式不正确或与数据模型不匹配。
     * 对应 [org.json.JSONException], [com.squareup.moshi.JsonDataException] 等。
     */
    PARSING(-100, "数据解析失败"),

    /**
     * 服务器异常。表示服务器返回了错误的 HTTP 状态码（如 4xx 或 5xx）。
     * 对应 [retrofit2.HttpException]。
     */
    SERVER_ERROR(-500, "服务器异常"),

    /**
     * SSL/TLS 证书错误。表示在 HTTPS 握手过程中发生问题，例如证书无效或不受信任。
     * 对应 [javax.net.ssl.SSLException]。
     */
    SSL_ERROR(-103, "SSL/TLS 握手失败"),

    /**
     * 请求被取消。通常是由于协程作业被主动取消。
     * 对应 [kotlin.coroutines.cancellation.CancellationException]。
     */
    CANCELLED(-2, "请求被取消"),

    /**
     * 协议错误。表示在网络协议层面发生问题，例如 HTTP 协议格式不正确。
     * 对应 [java.net.ProtocolException]。
     */
    PROTOCOL_ERROR(-501, "协议错误"),

    /**
     * 本地 IO 操作异常。表示在读取或写入数据流时发生错误。
     * 对应 [java.io.IOException], [java.io.EOFException] 等。
     */
    IO_ERROR(-104, "本地IO操作异常")
}
